 
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
 
struct node
{
	int _w;
	int _h;
	bool operator<(const node& obj)
	{
		if (_w != obj._w) // 体重升序
			return _w <= obj._w;
		else // 身高降序
			return _h > obj._h;
	}
};
int getMaxLength(vector<node>& v, int n)
{
	// 首先排序
	sort(v.begin(), v.end());
	vector<int> maxLength(n, 1);
	int ret = 0;
	// 求最大升序子序列的长度
	for (int i = 1; i < n; ++i)
	{
		for (int j = 0; j < i; ++j)
		{
			if (v[j]._h <= v[i]._h)
			{
				maxLength[i] = max(maxLength[i], maxLength[j] + 1);
			}
		}
		// 更新最大值
		ret = max(ret, maxLength[i]);
	}
	return ret;
}
 
int main()
{
	int n;
	while (cin >> n)
	{
		vector<node> v(n);
		int num = 0;
		// 输入数据
		for (int i = 0; i < n; ++i)
		{
			cin >> num >> v[i]._w >> v[i]._h;
		}
		cout << getMaxLength(v, n) << endl;
	}
	return 0;
}